#ifndef __edaTS_h__
#define __edaTS_h__

#include "edaSearch.h"
#include "edaMove.h"
#include "edaMoveGen.h"
#include "edaContinue.h"
#include "edaTabuList.h"
#include "edaAspirCrit.h"
#include "edaTSMoveExpl.h"

class edaTS: public edaSearch
{
 public:
  edaTS();
  edaTS( edaMove *_move,
	 edaMoveGen *_moveNext,
         edaTabuList *_tabuList,
         edaAspirCrit *_aspirCrit,
	 edaContinue *_continueCriteria);
  edaTS(edaMove *_move,
        edaTSMoveExpl *_moveExpl,
        edaContinue *_continueCriteria);
  ~edaTS();
  /**
   * Launch the search
   * \param solution Solution to improve
   * \return true
   */
  bool search(edaSolution &sol);
  virtual void Serialize(edaBuffer &buf, bool pack);

  setClassID( _SYSCLASSID_ + _CLSID_EDATS_ );
  
 private:
  void clean();

  edaMove *move;
  edaContinue *continueCriteria;
  edaTSMoveExpl *moveExpl;
};

#endif
